package tpi.gui.carmensd.ui

import android.app.Activity
import android.os.Bundle
import android.widget.Button
import org.eclipse.xtend.lib.annotations.Accessors
import retrofit.Callback
import retrofit.RestAdapter
import retrofit.RetrofitError
import retrofit.client.Response
import tpi.gui.carmensd.R
import tpi.gui.carmensd.dto.Pais
import tpi.gui.carmensd.service.CarmenSandiegoService
import android.widget.TextView
import android.widget.ArrayAdapter
import java.util.List
import tpi.gui.carmensd.dto.Informacion
import android.app.ListActivity
import android.widget.ListView
import tpi.gui.carmensd.dto.Lugar
import android.view.View.OnClickListener
import android.view.View
import android.widget.Toast
import android.content.Intent
import tpi.gui.carmensd.utils.Utils
import tpi.gui.carmensd.dto.OrdenDeArresto
import tpi.gui.carmensd.dto.Villano

@Accessors
class PistasActivity extends Activity {
	
	Pais paisActual
	Villano acusado
	CarmenSandiegoService service
	extension Utils = new Utils
	
    override void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_pistas)
        
		service = createService()
        pedidoPaisActual[| nombrePaisActual(); crearBotonera()]
        ordenDeArresto[| acusadoNombre(); estadoBotonInterpol() ]
        escogerLugar()
    }
	
	def pedidoPaisActual(()=>void action) {
		service.getPaisActual(
	       	new Callback<Pais>() {
	       		override failure(RetrofitError e) {
	       			e.printStackTrace
	       		}
	       		override success(Pais pais, Response response) {
	       			setPaisActual(pais)
	       			action.apply()
	       		}
	       	}
		)
	}

	def nombrePaisActual() {
		findViewById(R.id.nombrePaisActual) as TextView => [
        	text = paisActual.nombre
        ]
	}
	
	def visitarLugar(Integer i) {
		val lugar = paisActual.lugares.get(i)
		if(lugar.ocupante.nombreTipoOcupante != "Villano") { 
			findViewById(R.id.pistas) as ListView => [
				adapter = new ArrayAdapter<String>(this,
										android.R.layout.simple_list_item_1,
										lugar.ocupante.pistas.toStringList("dato"))
			]
			Toast.makeText(applicationContext, lugar.nombreTipoLugar, Toast.LENGTH_SHORT).show()
		} else {
			pantallaFinal()
		}
	}
	
	
	
	def pantallaFinal() {
		new Intent(this, PantallaFinalActivity).startActivity()
	}
	
	def visitarLugar1(View view) {
		visitarLugar(0)
	}
	def visitarLugar2(View view) {
		visitarLugar(1)
	}
	def visitarLugar3(View view) {
		visitarLugar(2)
	}
	
	def crearBotonera() {
		findViewById(R.id.boton_lugar1) as Button => [
			text = paisActual.lugares.get(0).nombreTipoLugar
		]
		findViewById(R.id.boton_lugar2) as Button => [
			text = paisActual.lugares.get(1).nombreTipoLugar
		]
		findViewById(R.id.boton_lugar3) as Button => [
			text = paisActual.lugares.get(2).nombreTipoLugar 
		]
	}
	
	def escogerLugar() {
		findViewById(R.id.pistas) as ListView => [
			adapter = new ArrayAdapter<String>(this,
	                               android.R.layout.simple_list_item_1,
	                               #["Escoja un lugar para visitar!"])
        ]
	}

	def ordenDeArresto(()=>void action) {
		service.getAcusado(
	       	new Callback<Villano>() {
	       		override failure(RetrofitError e) {
	       			e.printStackTrace
	       		}
	       		override success(Villano villano, Response response) {
	       			setAcusado(villano)
	       			action.apply()
	       		}
	       	}
		)
	}

	def acusadoNombre() {
		val n = findViewById(R.id.acusado) as TextView 
		n.text = acusado.nombre 
	}
	
	def estadoBotonInterpol() {
		findViewById(R.id.interpol) as Button => [
			enabled = acusado.nombre == "Desconocido"
		]
	}

	def irALaInterpol(View view) {
		new Intent(this, InterpolActivity).startActivity()
	}

	def irAlAeropuerto(View view) {
		new Intent(this, AeropuertoActivity).startActivity()
	}
	
}